package config

import (
	"flag"
	"fmt"
	"github.com/fsnotify/fsnotify"
	"github.com/spf13/viper"
)

var configPath string

func init() {
	flag.StringVar(&configPath, "c", "", "path to config file")
	flag.Parse()
}

// BindConfigFile 绑定配置文件
func BindConfigFile(filepath string) error {
	v := viper.New()
	if configPath != "" {
		v.SetConfigFile(configPath)
	} else {
		v.SetConfigFile(filepath)
	}
	if err := v.ReadInConfig(); err != nil {
		return err
	}
	//将配置反序列化到配置文件中
	err := v.Unmarshal(&SysConfig)
	if err != nil {
		return fmt.Errorf("config Unmarshal failed, err:%v\n", err)
	}
	//监听配置文件
	v.WatchConfig()
	//一旦配置文件改动，重新反序列化配置文件
	v.OnConfigChange(func(e fsnotify.Event) {
		fmt.Println("config file changed,system will reload config")
		if err := v.Unmarshal(&SysConfig); err != nil {
			fmt.Printf("config file changed,viper.Unmarshal failed, err:%v\n", err)
		}
	})
	return nil
}
